class LRUCache {
    Map<Integer, Integer> cache;
    int capacity;

    public LRUCache(int capacity) {
        this.capacity = capacity;
        // 0.75 是数组扩容的触发条件，true 表示将结点以访问顺序排序，默认是插入顺序
        this.cache = new LinkedHashMap<Integer, Integer>(capacity, 0.75f, true) {
            protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
                // 设置删除年长结点的触发条件为缓存满
                return size() > capacity;
            }
        };
    }

    public int get(int key) {
        // 自动调整顺序，不存在返回 -1
        return cache.getOrDefault(key, -1);
    }

    public void put(int key, int value) {
        // 自动插入，自动判满删除
        cache.put(key, value);
    }
}